package com.lee.app.util;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import lombok.SneakyThrows;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Lee
 *  Jackson工具
 *  需要添加项目依赖：jackson-core/jackson-annotations/jackson-databind
 */
public class JacksonUtil {
    /**
     * 通过Jackson将数据转换为JSON字符串
     *
     * @param code 0表示操作失败，1表示操作成功
     * @param msg  返回的文字信息
     * @param data 返回的数据
     * @return 转换后的JSON字符串
     */
    @SneakyThrows
    public static String build(int code, String msg, Object data) {
        Map<String, Object> map = new HashMap<>(3);
        map.put("code", code);
        map.put("msg", msg);
        map.put("data", data);
        ObjectMapper objectMapper = new ObjectMapper()
                // 最终的转换结果中不包含null值
                .setSerializationInclusion(JsonInclude.Include.NON_NULL)
                // 最终的时间类型属性不会被转成时间戳
                .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
                // 将所有的时间类型属性转成指定格式
                .setDateFormat(new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"));
        return objectMapper.writeValueAsString(map);
    }

    public static String build(Object data) {
        return build(1, "success", data);
    }

    public static String build(int code, String msg) {
        return build(code, msg, null);
    }
}
